home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / text / misc / ht.lha / hypertext / Rexx / link.rexx < prev    next >
OS/2 REXX Batch file  |  1990-12-23  |  8KB  |  308 lines

  1. /*    This program implements a little gadget link definition for use with
  2.  * HT and various editors.  You can easily click your way through defining
  3.  * an entire link.  The string this function returns is what needs to be
  4.  * inserted into the document.
  5.  */
  6. /****************
  7.  * D.B.G. 1990
  8.  ****************/
  9.  
  10.  /* should check for failure of these calls */
  11.  if ~Show('L', 'rexxsupport.library') then
  12.   check = AddLib('rexxsupport.library', 10, -30, 0)
  13.  if (check == 0) then do
  14.      say "Need to have the rexxsupport library in LIBS:!"
  15.      exit
  16.    end
  17.  
  18.  
  19.  if ~Show('L', 'rexxarplib.library') then
  20.   check = AddLib('rexxarplib.library', 10, -30, 0)
  21.  if (check == 0) then do
  22.    say "Need to have the rexxarplib.library and screenshare.library in LIBS:"
  23.    exit
  24.   end
  25.  
  26.  
  27.  /* this variable and its stems define the gadget names and the
  28.   * associated file name.  Change them to suit your system.
  29.   */
  30.  cport = 'LINK_PORT'
  31.  notport = 'LINK_notify'
  32.  
  33.  address AREXX "'x=call CreateHost(" cport "," notport ")'"
  34.  
  35.  do until ShowList(P,cport)
  36.    call Delay(10)
  37.   end
  38.  
  39.  idcmp = 'CLOSEWINDOW+WINDOWDRAG+GADGETUP'
  40.  flags = 'WINDOWCLOSE+WINDOWDRAG+BACKFILL'
  41.  call OpenWindow(cport, 150, 20, 295, 160, idcmp, flags, 'Link Requestor')
  42.  call ActivateWindow(cport)
  43.  
  44.  /* we want to add the string gadget first so you can start typing into it
  45.   * right away
  46.   */
  47.  gadg.9.name = ""      ;
  48.  call AddGadget(cport, 25,  105, "gadg9", gadg.9.name,  "%g", 250)
  49.  call ActivateGadget(cport, gadg9)
  50.  
  51.  /* print some text and lines to explain things */
  52.  call SetDrMd(cport, COMPLEMENT)
  53.  call Move(cport, 25, 20)
  54.  call Text(cport, "Link Type :")
  55.  call Move(cport, 25, 23)
  56.  call Draw(cport, 115, 23)
  57.  
  58.  call Move(cport, 25, 94)
  59.  Call Text(cport, "Link Information :")
  60.  call Move(cport, 25, 97)
  61.  call Draw(cport, 170, 97)
  62.  
  63.  call SetAPen(cport, 1)
  64.  call Move(cport, 10, 80)
  65.  call Draw(cport, 285, 80)
  66.  
  67.  call Move(cport, 30, 51)
  68.  call Draw(cport, 245, 51)
  69.  
  70.  
  71.  gadg.1.name = "Anim " ; gadg.2.name = "Arexx" ; gadg.3.name = "Play " ;
  72.  gadg.4.name = "Link " ; gadg.5.name = "Show " ; gadg.6.name = "Rexx " ;
  73.  gadg.7.name = "Sound" ; gadg.8.name = " Run " ;
  74.  gadg.10.name = "File List" ; gadg.11.name = "Preview Link"
  75.  gadg.12.name = "CANCEL"
  76.  cur_linktype = 4
  77.  
  78.  gadg.1.info = "[anim options] <Anim filename>"
  79.  gadg.2.info = "<ARexx program> [options]"
  80.  gadg.3.info = "[options] <SMUS filename>"
  81.  gadg.4.info = "<filename>  [Text to link to]"
  82.  gadg.5.info = "[options] <Picture filename>"
  83.  gadg.6.info = gadg.2.info
  84.  gadg.7.info = "[options] <Sound filename>"
  85.  gadg.8.info = "<External program> [options]"
  86.  /* gadg.9 is the string gadget */
  87.  
  88.  call write_info(gadg.cur_linktype.info)
  89.  
  90.  gadg.1.x = 25 ; gadg.2.x = 85 ; gadg.3.x = 150 ; gadg.4.x = 210 ;
  91.  gadg.5.x = 25 ; gadg.6.x = 85 ; gadg.7.x = 150 ; gadg.8.x = 210 ;
  92.  gadg.1.y = 30 ; gadg.2.y = 30 ; gadg.3.y = 30    ; gadg.4.y = 30  ;
  93.  gadg.5.y = 58 ; gadg.6.y = 58 ; gadg.7.y = 58    ; gadg.8.y = 58  ;
  94.  
  95.  do i = 1 to 8
  96.    call AddGadget(cport, gadg.i.x,  gadg.i.y,  "gadg", gadg.i.name,  i)
  97.  end
  98.  call AddGadget(cport, 15,  140, "gad10", gadg.10.name, '10' )
  99.  call AddGadget(cport, 180, 140, "gad11", gadg.11.name, '11' )
  100.  call AddGadget(cport, 110,  140, "gad12", gadg.12.name, '12' )
  101.  
  102.  call highlight_type gadg.cur_linktype.x gadg.cur_linktype.y
  103.  
  104.  mainport = 'MP'
  105.  mport = OpenPort(mainport)
  106.  do until ShowList(P, mainport)
  107.    call delay(10)
  108.   end
  109.  
  110.  call SetNotify(cport, GADGETUP, mainport)
  111.  call SetNotify(cport, CLOSEWINDOW, mainport)
  112.  
  113.  notquit = 1
  114.  
  115.  call SetDrMd(cport, COMPLEMENT)
  116.  
  117.  /* get the ht.config file here.  we wait so long to do this, so everything
  118.   * has already been opened and there aren't any unnecessary delays.
  119.   * this function creates a stemmed variable called htconfig.
  120.   */
  121.  call get_htconfig()
  122.  
  123.  do while notquit
  124.     call WaitPkt(mainport)
  125.     packet = GetPkt(mainport)
  126.  
  127.     if packet ~== '0000 0000'x then
  128.      do
  129.       id = GetArg(packet, 0)
  130.       call Reply(packet, 0)
  131.  
  132.       select
  133.     when id = 'CLOSEWINDOW' then call closeup()
  134.     when id > 0 & id < 9 then
  135.       do
  136.        call highlight_type gadg.cur_linktype.x gadg.cur_linktype.y
  137.        call highlight_type gadg.id.x gadg.id.y
  138.        call write_info gadg.id.info
  139.        cur_linktype = id
  140.       end
  141.     when id = 10 then
  142.        call do_filerequest()
  143.     when id = 11 then
  144.        call preview_link()
  145.     when id = 12 then do
  146.        call stop("LINK_PORT")
  147.        exit ""
  148.       end
  149.     otherwise
  150.       call closeup()
  151.       end
  152.      end
  153.  end
  154. exit
  155.  
  156. closeup:
  157.  options results
  158.  
  159.  id = get_gadg_string()
  160.  
  161.  call stop("LINK_PORT")
  162.  
  163.  if id = "" then
  164.    exit ""
  165.  l_name = strip(gadg.cur_linktype.name, B)
  166.  
  167.  ret = "\"l_name" {" id "}"
  168.  exit ret
  169. return
  170.  
  171. write_info:
  172.  parse arg string
  173.  
  174.  call SetDrMd(cport, JAM1)
  175.  call RectFill(cport, 10, 120, 275, 130)
  176.  call Move(cport, 25, 127)
  177.  call SetDrMd(cport, COMPLEMENT)
  178.  call Text(cport, string)
  179.  
  180. return
  181.  
  182. highlight_type:
  183.  parse arg x y
  184.  
  185.  y = y - 1
  186.  call AreaMove(cport, x+15, y+20)
  187.  call AreaDraw(cport, x+25, y+20)
  188.  call AreaDraw(cport, x+20, y+15)
  189.  call AreaDraw(cport, x+15, y+20)
  190.  call AreaEnd(cport)
  191.  
  192.  drop x y
  193. return
  194.  
  195.  
  196. do_filerequest:
  197.  
  198.   /* check if there is a default path to use.  If not we get a null string
  199.    * back and that's o.k. too.
  200.    */
  201.   pathname = GetClip("HT_LINK_PATH")
  202.   res = GetFile(15, 10, pathname, "", "Select name of file use:")
  203.  
  204.   /* now we have to put any base path name back in the clip list for
  205.    * future use
  206.    */
  207.   if ( res ~= "" & LastPos("/", res) > Pos(":", res) ) then
  208.     SetClip( "HT_LINK_PATH", Left(res, LastPos("/", res) - 1) )
  209.   else if (res ~= "") then
  210.     SetClip( "HT_LINK_PATH", Left(res, Pos(":", res)) )
  211.  
  212.   cur_name = get_gadg_string()
  213.  
  214.   /* if true, we have to extract relevant info and keep it */
  215.   if cur_name ~= "" then do
  216.       parse var cur_name . stuff
  217.       res = res || stuff
  218.     end
  219.  
  220.   gadg.9.name = res
  221.  
  222.   call RemoveGadget(cport, "gadg9")
  223.   call AddGadget(cport, 25,  105, "gadg9", gadg.9.name,  "%g", 250)
  224.   call RefreshGadgets(cport)
  225.   call ActivateGadget(cport, "gadg9")
  226.  
  227.   drop res cur_name
  228. return
  229.  
  230. preview_link:
  231.   string = get_gadg_string()
  232.   if string = "" then do
  233.      Request(50, 50, "No link to preview", , "Gotcha", "O.k. bud")
  234.      return
  235.    end
  236.  
  237.   /* string now has the actual link information that would be used by HT */
  238.   /* based on the current link type we will "do" that link               */
  239.  
  240.   id = upper(strip(gadg.cur_linktype.name, 'B'))   /* strip all blanks */
  241.  
  242.   if (id == "LINK") then do
  243.     call startht.rexx()
  244.     call Delay(10)                 /* make sure HT has started ! */
  245.    end
  246.  
  247.   interpret htconfig.id "'"string"'"      /* actually execute the link ! */
  248.  
  249.   drop string fname id
  250. return
  251.  
  252.  
  253. /* returns the string contained in the string gadget.  This routine
  254.  * should be generalized more
  255.  */
  256. get_gadg_string:
  257.  options results
  258.  call ReadGadget(cport, gadg9)
  259.  call WaitPkt(mainport)
  260.  packet = GetPkt(mainport)
  261.  ret = GetArg(packet, 0)
  262.  call Reply(packet, 0)
  263.  
  264. return ret
  265.  
  266.  
  267. /* find and open the ht.config file.  Parse its contents and create a
  268.  * stemmed variable htconfig which holds the commands strings to be
  269.  * used in preview_link.  The stems of htconfig are going to be interpreted
  270.  * so we must prepend an "address command" to what we read in from the file.
  271.  */
  272. get_htconfig:
  273.  /* now we set up defaults... */
  274.  htconfig.SHOW     = "address command show "
  275.  htconfig.ANIM     = "address command showanim "
  276.  htconfig.SOUND  = "address command ssp "
  277.  htconfig.PLAY     = "address command play "
  278.  htconfig.REXX     = "address REXX "
  279.  htconfig.AREXX  = "address AREXX "
  280.  htconfig.RUN     = "address command run "
  281.  htconfig.LINK     = "address HT LOAD "
  282.  
  283.  if ~open(conf, "s:ht.config", "READ") then     /* check s: first */
  284.    if ~open(conf,"ht.config", "READ") then      /* then check current dir */
  285.       return
  286.  
  287.  /* now we've got a valid filehandle and should parse the file up */
  288.  do while ~eof(conf)
  289.    line = readln(conf)
  290.    if index(line, "#") == 1 then
  291.      iterate              /* skip line because it's a comment */
  292.  
  293.    word = upper(word(line, 1))    /* get the first word */
  294.  
  295.    select
  296.      when word = "SHOW"  then htconfig.show  = "address command " || "'" || substr(line, length(word)+1) || "'"
  297.      when word = "SOUND" then htconfig.sound = "address command " || "'" || substr(line, length(word)+1) || "'"
  298.      when word = "PLAY"  then htconfig.play  = "address command " || "'" || substr(line, length(word)+1) || "'"
  299.      when word = "ANIM"  then htconfig.anim  = "address command " || "'" || substr(line, length(word)+1) || "'"
  300.      otherwise nop
  301.     end
  302.  end    /* of while loop */
  303.  
  304.  close(conf)
  305.  
  306.  drop line word conf
  307. return
  308.